package org.app;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
import java.util.List;
import java.util.Set;

import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;

public class Foo {
	public static void main(String[] args) throws Exception {
		Foo foo=new Foo();
		String temp="23-54364";
		foo.toValue(temp);
	//	foo.fromString(temp);
		foo.toInteger(temp);
		
		
		
		
	}
	
	
	public Object fromString(String temp){

		long now=System.nanoTime();
		char ch[]=temp.toCharArray();
		int size=ch.length;
		int result=0;
		int wei=1;
	//	int dian=temp.indexOf('.');//int double
		while(size-->0){
		
		int n=ch[size]-'0';
		if(n>=0&&n<radix){
		result+=n*wei;
		wei*=10;
		}else
		return temp;
		}
		System.out.println(System.nanoTime()-now);
		return result;
		}
		public Object toInteger(String temp){
		long now =System.nanoTime();
		Object result=Integer.parseInt(temp);
		System.out.println(System.nanoTime()-now);
		return result;
		}
		
		int radix=10;
		public Object toValue(String temp){
			long now=System.nanoTime();
			char[] ch=temp.toCharArray();
			
			int size=ch.length;
			long result=0;//临时结果 保留每个带或不带（+/-）用于简单字符串运算（仅加减）
			int rs=0;//临时结果 将字符串每位转换为数字
			long mul=1;

			while(size-->0){

				if(ch[size]=='-'){//计算顺序不考虑（）的情况；
					result+=0-rs;
					rs=0;
					mul=1;
					continue;
				}else if(ch[size]=='+'){
					result+=rs;
					rs=0;
					mul=1;
					continue;
				}
				int n=ch[size]-'0';
				if(n>=0&&n<radix){
					rs+=n*mul;
					mul*=radix;
				}else return temp;//不是数字
			}
			result+=rs;
			System.out.println(System.nanoTime()-now);
			Object obj=result;
			
			//粗略转换 由于反射时若初始化 field 不支持 拆箱，转换为最小 后可用于装箱
			int length=obj.toString().length();
			if(length<5)return (short)result;//32767 short
    		if(length<10)return (int)result;//2147483647 int
//		
		//	return obj;
			return result;
		}

}